const express = require('express');
const mysql = require('mysql2');
const faker = require('faker'); // 用于生成随机数据
const jwt = require('jsonwebtoken'); // 引入jsonwebtoken用于生成token

const app = express();
const port = 3200; // 服务监听的端口
app.use(express.json()); // 解析 JSON 请求体  获取到请求的参数 没办法解析参数
const cors = require('cors'); // 引入 CORS 中间件  解决跨域问题
app.use(cors()); // 启用 CORS缺少 



// 创建数据库连接
const connection = mysql.createConnection({  //这里定义connection 下面使用connection.query方法进行数据库操作 否则报错
    host: '127.0.0.1',
    user: 'root', // 替换为你的数据库用户名
    password: '123456', // 替换为你的数据库密码
    database: 'sakila'
});

// 连接到数据库
connection.connect(err => {
    if (err) throw err;
    console.log('已连接到数据库!');
    
});


// 新增获取数据的接口
app.get('/api/products', (req, res) => {
    const query = 'SELECT * FROM products'; // 查询所有产品数据

    connection.query(query, (err, results) => {
        if (err) {
            console.error(err);
            return res.status(500).json({ error: '数据库查询失败' });
        }
        res.json(results); // 返回查询结果
    });
});

// 获取店铺内所有商品的数据接口
app.get('/api/shopproducts', (req, res) => {
    // 构建 SQL 查询以获取所有商品
    const query = 'SELECT * FROM shopproducts';
    connection.query(query, (err, results) => {
        if (err) {
            console.error('查询错误:', err);
            return res.status(500).json({ error: '数据库查询错误' });
        }
        res.json(results); // 返回所有商品的查询结果
    });
});

//获取店铺内商品的数据接口
app.get('/api/shopproducts/:id', (req, res) => {
    const proId = req.params.id; // 获取商品id

     // 构建 SQL 查询
  const query = 'SELECT * FROM shopproducts WHERE id = ?';
  connection.query(query, [proId], (err, results) => {
    if (err) {
      console.error('查询错误:', err);
      return res.status(500).json({ error: '数据库查询错误' });
    }

    // 如果没有找到数据
    if (results.length === 0) {
      return res.status(404).json({ message: '未找到该产品' });
    }
    // 返回查询结果
    res.json(results); // 返回第一个匹配的结果
  });

})


//更新商品数据接口
// 根据商品ID和proId更新isLike状态的接口
app.put('/api/shopproducts/:id/:proid/isLike', (req, res) => {
    const id = req.params.id; // 从路径中获取id
    const proId = req.params.proid; // 从路径中获取proId
    const { isLike } = req.body; // 从请求体中获取isLike值
 console.log(id,proId,isLike)
    // 确保isLike的值传递并且为布尔值
    if (typeof isLike !== 'boolean') {
        return res.status(400).json({ error: '缺少必要的参数，isLike必须为布尔类型' });
    }

    // 构建 SQL 更新查询
    const query = 'UPDATE shopproducts SET isLike = ? WHERE id = ? AND proid = ?';
    connection.query(query, [isLike, id, proId], (err, results) => {
        if (err) {
            console.error('更新错误:', err);
            return res.status(500).json({ error: '数据库更新错误' });
        }
        if (results.affectedRows === 0) {
            return res.status(404).json({ error: '未找到匹配的商品' });
        }
        res.json({ message: '商品状态更新成功' }); // 返回成功消息
    });
});


//新增加入购物车接口
app.post('/api/cartlist', (req, res) => {
    console.log(11111);
    
    const cartItem = req.body; // 从请求体中获取产品对象
  
    // 创建 SQL 查询
    const query = `INSERT INTO cartlist (id, shopname, proname, category, salenum, proid, price, img, descpro, star, mainingredient, taste, assessment,num,isLike) 
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?)`;
    
    // 执行查询
    connection.query(query, [
      cartItem.id,
      cartItem.shopname,
      cartItem.proname,
      cartItem.category,
      cartItem.salenum,
      cartItem.proid,
      cartItem.price,
      cartItem.img,
      cartItem.descpro,
      cartItem.star,
      cartItem.mainingredient,
      cartItem.taste,
      cartItem.assessment,
      cartItem.num,
      cartItem.isLike   //新增isLike字段 如果传的参数里有isLike 而这里没有接收会有问题？
    ], (err, results) => {
      if (err) {
        console.error('插入失败:', err);
        return res.status(500).json({ error: '插入失败' });
      }
  
      res.status(201).json({ message: '添加成功', id: results.insertId });
    });
  });

  //获取购物车列表接口
  app.get('/api/cartlist', (req, res) => {
    const query = 'SELECT * FROM cartlist'; // 查询购物车里的所有商品

    connection.query(query, (err, results) => {
        if (err) {
            console.error('查询失败:', err);
            return res.status(500).json({ error: '查询失败' });
        }

        res.json(results); // 返回购物车列表
    });
});

//// 删除购物车商品的接口
app.delete('/api/cartlist/:id', (req, res) => {
    const id = req.params.id; // 获取路径参数中的商品ID
        
    // SQL删除语句
    const query = 'DELETE FROM cartlist WHERE id = ?';

    // 执行删除操作
    connection.query(query, [id], (err, results) => {
        if (err) {
            console.error('删除失败:', err);
            return res.status(500).json({ error: '删除失败' });
        }

        if (results.affectedRows > 0) {
            // 如果删除成功
            res.status(200).json({ message: '删除成功' });
        } else {
            // 如果没有找到要删除的记录
            res.status(404).json({ message: '商品未找到' });
        }
    });
});

//新增用户数据
app.post('/api/users', (req, res) => {
    const { username, password } = req.body; // 解构赋值

    if (!username || !password) {
        return res.status(400).json({ error: '字段必填' });
    }

    // 查询数据库检查用户是否存在
    const checkUserQuery = 'SELECT * FROM users WHERE username = ?';
    connection.query(checkUserQuery, [username], (err, results) => {
        if (err) {
            console.error(err);
            return res.status(500).json({ error: '数据库查询失败' });
        }

        // 用户存在，进行密码验证
        if (results.length > 0) {
            const user = results[0];
            if (user.password === password) {
                // 生成token
                const token = jwt.sign({
                    username: username,
                    exp: Math.floor(Date.now() / 1000) + (30 * 60) // 设置过期时间为30分钟
                }, 'your_secret_key'); // 替换为你的密钥

                return res.status(200).json({ token: token });
            } else {
                return res.status(401).json({ error: '密码错误' });
            }
        } else {
            // 用户不存在，进行新增操作
            const sql = 'INSERT INTO users (username, password) VALUES (?, ?)';
            connection.query(sql, [username, password], (err, result) => {
                if (err) {
                    console.error(err); // 输出错误信息
                    return res.status(500).json({ error: '数据库连接失败' });
                }
                res.status(201).json({ message: '用户创建成功', userId: result.insertId });
            });
        }
    });
});
// app.post('/api/users', (req, res) => {
//     const { username, password } = req.body;  //解构赋值
//    console.log(11111);
//    console.log(req.body);
   
   
//     if (!username || !password) {
//         return res.status(400).json({ error: '字段必填' });
//     }
//    // 查询数据库检查用户是否存在
//     const checkUserQuery = 'SELECT * FROM users WHERE username = ?'; 
//  connection.query(checkUserQuery, [username], (err, results) => {
//         if (err) {
//             console.error(err);
//             return res.status(500).json({ error: '数据库查询失败' });
//         }
//   // 用户存在，进行密码验证
//         if (results.length > 0) {
// 	console.log(results)   //数组里面有对象
//         const user = results[0];
//         if( user.password === password){
//             token = jwt.encode({
//                 'username': username,
//                 'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)  # 设置过期时间
//             }, SECRET_KEY, algorithm='HS256')
    
//             return jsonify({'token': token})
// 	//   return res.status(200).json({ message: '用户已存在，密码验证通过' });
	
//         } else {
//                 return res.status(401).json({ error: '密码错误' });
//             }
	    
// 	   } else{
// //用户不存在，进行新增操作
//     const sql = 'INSERT INTO users (username, password) VALUES (?, ?)';
//     connection.query(sql, [username, password], (err, result) => {   //db.query没有获取到 相当于connection.query
//         if (err) {
//             console.error(err); // 输出错误信息
//             return res.status(500).json({ error: 'Database error数据库连接失败' });
//         }
//         res.status(201).json({message: '用户创建成功', userId: result.insertId });
//     });
//     }})
//     // res.send({message: 'asdasdasdasdasd'})
// });




// 启动服务
app.get('/', (req, res) => {
    res.send('欢迎访问数据库服务!');
});

app.listen(port, () => {
    console.log(`服务正在 http://localhost:${port} 运行`);
});
